The personal computer (PC) industry has evolved in such a way that end users of personal computers typically obtain the computer as part of a preconfigured system of hardware components with operating system (OS) software and important application software preinstalled. The assembly of the hardware of such a system and the preloading of software is accomplished by original equipment manufacturers (OEMs). OEMs in turn obtain the OS and application software from software vendors and obtain driver software, typically associated with component hardware devices in the system (such as audio, keyboard, display, video, or printer devices), from driver vendors. Particular PC models or configurations manufactured by OEMs are designed with the interests of distinct categories of users in mind.
While this separation and specialization of functions in the production of PC systems benefits end users of computers by providing them with a useful working system at the outset, it also complicates the correction of errors in preinstalled software. Software errors decrease the usefulness and ease of use of PCs and the software programs which run on them. Some errors may lead to system or application failures (“crashes”), possibly resulting in the loss of data and, in the case of OS kernel-mode crashes, typically requiring a reboot. In general, it is difficult, if not impossible, for end users to determine the precise cause of a crash. Moreover, the nature of the personal computer industry inhibits the timely communication of crash-related errors to the parties best suited to identify and correct such errors, the OEMs and driver vendors. Corrected versions (“fixes”) of preinstalled software have typically resulted from either the debugging of test cases by software developers prior to the release of the software to OEMs, or from the communication of software problems to developers as a result of customer feedback and support call center data received by OEMs and OS vendors. In the former case, the real-world bugs experienced by users of particular machines are not necessarily discovered; in the latter case, the communication and diagnosis of errors by hardware and software vendors is necessarily a slow process.
A recent improvement in this state of affairs has been provided in the Windows XP family of operating systems. (Throughout this specification, “Windows XP” denotes the original release of the Microsoft Windows XP operating system and any subsequent operating systems with OCA functionality, including but not limited to Windows XP Service Pack 1 and Windows 2003 Server.) Windows XP includes the feature Online Crash Analysis (OCA). OCA permits kernel-mode and user-mode real-time crash data to be collected from users' machines following the crash and submitted over the Internet to facilities provided by the OS vendor, so that the OS vendor can sort and analyze the data and determine the program that caused the crash. In the case of kernel-mode crashes, which are usually caused by bugs in drivers, the Windows XP user is required to reboot following the crash. The user is then given the option of submitting crash data over the Internet. Submitted data is stored, sorted and analyzed, and crash reports are made available to appropriate OEMs and driver vendors. The use of crash data from the user's machine is restricted in accordance with a privacy agreement with the user.
The expedited communication of real-world driver errors to OEMs and driver vendors has the potential of enhancing their ability to identify and correct such errors and reduce associated support costs. However, prior to the invention described herein, OCA's effectiveness had been significantly limited by the absence of an efficient means for OCA to obtain more specific hardware-configuration information about the machine on which a system crash occurred. The end user crashes reported by OCA were difficult for driver writers to reproduce and thus to diagnose and correct. It was found that crashes were typically specific to particular PC system models or chipsets, but this was not easy to determine through OCA because of the lack of a simple and efficient means of gathering information identifying a particular PC system by details of its OEM hardware configuration. Previous solutions to the general problem of identifying machines have suffered from costliness and complexity, however. Typically, such solutions have involved engineering changes, or have been dependent on the broad adoption of complex standards among the large number of PC OEMs.